#===istalismanplugin===
# -*- coding: utf-8 -*-

# $Revision: 56 $
# $Author: rchiganov@gmail.com $
# $Date: 2013-09-23 10:14:38 +0000 (Mon, 23 Sep 2013) $

#---------------------------------------------------------------------------------------------------

import xmpp
import random

#---------------------------------------------------------------------------------------------------

AROLES_FILE = 'aroles.txt'

#---------------------------------------------------------------------------------------------------

def aroles_join ( pgroupchat, pnick, ptype, prole ):
	if not GROUPCHATS.has_key(pgroupchat):
		return

	ljid = get_true_jid(pgroupchat + u'/' + pnick)

	LFILE = 'dynamic/%s/%s' % ( pgroupchat, AROLES_FILE )
	vika_check_file(LFILE, u'{}' )
	lloc = eval(open(LFILE, 'r').read())

	lbool = 0

	if lloc.has_key(u'kick'):
		if ljid in lloc[u'kick']:
			lbool = 1
			lrole = u'none'
			lanswer = u'тебе нельзя тут появляться *GIRL_DEVIL*'

	if lloc.has_key(u'visitor') and lbool == 0:
		if ljid in lloc[u'visitor']:
			lbool = 1
			lrole = u'visitor'
			lanswer = u'автососка у тебя *PARDON*'

	if lloc.has_key(u'moderator') and lbool == 0:
		if ljid in lloc[u'moderator']:
			lbool = 1
			lrole = u'moderator'
			lanswer = u'выдаём зелёные трусы при входе :-)'

	if lbool == 1:
		liq = xmpp.Iq('set')
		liq.setTo(pgroupchat)
		liq.setID('vika' + str(random.randrange(1000, 9999)))
		lquery = xmpp.Node('query')
		lquery.setNamespace('http://jabber.org/protocol/muc#admin')
		lreason = lquery.addChild('item', { 'nick': pnick, 'role': lrole })
		lreason.setTagData('reason', get_bot_nick(pgroupchat) + ': ' + lanswer)
		liq.addChild(node=lquery)
		JCON.send(liq)

#---------------------------------------------------------------------------------------------------

def aroles_moderator ( ptype, psource, pparameters ):
	if not GROUPCHATS.has_key(psource[1]):
		reply(ptype, psource, u'эта команда доступна только в конференции')
		return

	lparam = pparameters.split()
	if len(lparam) > 1:
		reply(ptype, psource, u'не понимаю я тебя... *PARDON*')
		return

	LFILE = 'dynamic/%s/%s' % ( psource[1], AROLES_FILE )
	vika_check_file(LFILE, u'{}' )
	lloc = eval(open(LFILE, 'r').read())

	if not lloc.has_key(u'moderator'):
		lloc[u'moderator'] = []

	if len(lparam) == 0:
		if len(lloc[u'moderator']) == 0:
			reply(ptype, psource, u'пусто там... *PARDON*')
			return

		if ptype == 'public':
			reply(ptype, psource, u'в привате')
		reply('private', psource, u'>>>\nСписок автомодераторов:\n* ' + u'\n* '.join(lloc[u'moderator']))

	else:
		luser = u''
		if lparam[0].count('@') == 1:
			luser = lparam[0]
		elif GROUPCHATS[psource[1]].has_key(lparam[0]):
			luser = get_true_jid(psource[1] + '/' + lparam[0])
		else:
			reply(ptype, psource, u'а это хто такой? *SCRATCH*')
			return

		if luser in lloc[u'moderator']:
			lloc[u'moderator'].remove(luser)
			reply(ptype, psource, u'пользователь %s удалён из списка амодеров конфы' % lparam[0])
		else:
			lloc[u'moderator'].append(luser)
			reply(ptype, psource, u'пользователь %s добавлен в список амодеров конфы' % lparam[0])

		write_file(LFILE, str(lloc))

#---------------------------------------------------------------------------------------------------

def aroles_visitor ( ptype, psource, pparameters ):
	if not GROUPCHATS.has_key(psource[1]):
		reply(ptype, psource, u'эта команда доступна только в конференции')
		return

	lparam = pparameters.split()
	if len(lparam) > 1:
		reply(ptype, psource, u'не понимаю я тебя... *PARDON*')
		return

	LFILE = 'dynamic/%s/%s' % ( psource[1], AROLES_FILE )
	vika_check_file(LFILE, u'{}' )
	lloc = eval(open(LFILE, 'r').read())

	if not lloc.has_key(u'visitor'):
		lloc[u'visitor'] = []

	if len(lparam) == 0:
		if len(lloc[u'visitor']) == 0:
			reply(ptype, psource, u'пусто там... *PARDON*')
			return

		if ptype == 'public':
			reply(ptype, psource, u'в привате')
		reply('private', psource, u'>>>\nСписок юзеров с автосоской:\n* ' + u'\n* '.join(lloc[u'visitor']))

	else:
		luser = u''
		if lparam[0].count('@') == 1:
			luser = lparam[0]
		elif GROUPCHATS[psource[1]].has_key(lparam[0]):
			luser = get_true_jid(psource[1] + '/' + lparam[0])
		else:
			reply(ptype, psource, u'а это хто такой? *SCRATCH*')
			return

		if luser in lloc[u'visitor']:
			lloc[u'visitor'].remove(luser)
			reply(ptype, psource, u'пользователь %s удалён из списка автопосетителей конфы' % lparam[0])
		else:
			lloc[u'visitor'].append(luser)
			reply(ptype, psource, u'пользователь %s добавлен в список автопосетителей конфы' % lparam[0])

		write_file(LFILE, str(lloc))

#---------------------------------------------------------------------------------------------------

def aroles_kick ( ptype, psource, pparameters ):
	if not GROUPCHATS.has_key(psource[1]):
		reply(ptype, psource, u'эта команда доступна только в конференции')
		return

	lparam = pparameters.split()
	if len(lparam) > 1:
		reply(ptype, psource, u'не понимаю я тебя... *PARDON*')
		return

	LFILE = 'dynamic/%s/%s' % ( psource[1], AROLES_FILE )
	vika_check_file(LFILE, u'{}' )
	lloc = eval(open(LFILE, 'r').read())

	if not lloc.has_key(u'kick'):
		lloc[u'kick'] = []

	if len(lparam) == 0:
		if len(lloc[u'kick']) == 0:
			reply(ptype, psource, u'пусто там... *PARDON*')
			return

		if ptype == 'public':
			reply(ptype, psource, u'в привате')
		reply('private', psource, u'>>>\nСписок юзеров в акиклисте:\n* ' + u'\n* '.join(lloc[u'kick']))

	else:
		luser = u''
		if lparam[0].count('@') == 1:
			luser = lparam[0]
		elif GROUPCHATS[psource[1]].has_key(lparam[0]):
			luser = get_true_jid(psource[1] + '/' + lparam[0])
		else:
			reply(ptype, psource, u'а это хто такой? *SCRATCH*')
			return

		if luser in lloc[u'kick']:
			lloc[u'kick'].remove(luser)
			reply(ptype, psource, u'пользователь %s удалён из акиклиста конфы' % lparam[0])
		else:
			lloc[u'kick'].append(luser)
			reply(ptype, psource, u'пользователь %s добавлен в акиклист конфы' % lparam[0])

		write_file(LFILE, str(lloc))

#---------------------------------------------------------------------------------------------------

register_join_handler(aroles_join)
register_command_handler(aroles_moderator, 'амодер', [ 'админ', 'мук', 'все' ], 20, 'Добавляет юзера в список автомодераторов и удаляет из него. Без параметров показывает список. В качестве параметра должен передаваться ник или jid юзера. Если юзер присутствует в списке, то производится его удаление из оного, иначе добавляется.', 'амодер [jid/ник]', [ 'амодер test@jabber.ru', 'амодер Вася' ])
register_command_handler(aroles_visitor, 'адевойс', [ 'админ', 'мук', 'все' ], 20, 'Добавляет юзера в визиторы (пользователь лишается права голоса при каждом входе в конференцию). Без параметров показывает список юзеров. В качестве параметра должен передаваться ник или jid юзера. Если юзер присутствует в списке, то производится его удаление из оного, иначе добавляется.', 'адевойс [jid/ник]', [ 'адевойс test@jabber.ru', 'адевойс Вася' ])
register_command_handler(aroles_kick, 'акик', [ 'админ', 'мук', 'все' ], 20, 'Добавляет ник либо jid в автокик. Без параметров покажет акиклист. Если юзер присутствует в списке, то производится его удаление из оного, иначе добавляется.', 'акик [jid/ник]', [ 'акик test@jabber.ru', 'акик Вася' ])

#---------------------------------------------------------------------------------------------------
